//
//  LightsController.h
//  SuperLight
//
//  Created by Charlie Liao on 14-4-24.
//  Copyright (c) 2014年 Charlie Liao. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "DataProcessor.h"
#import "GCDAsyncSocket.h"

#define SERVER_IP_ADDR      @"192.168.1.100"
#define SERVER_PORT         50000

/** 事件通知 **/
#define ncLightConnected              @"ncLightConnected"
#define ncLightDisconnect             @"ncLightDisconnect"
#define ncLightConnectionFailed       @"ncLightConnectionFailed"
#define ncLightMessge                 @"ncLightMessge"

@protocol LightMsgDelegate <NSObject>

@optional
- (void)findTheLight:(msg_pkt)msg;

@end

@interface LightController : NSObject
 < DataProcessorDelegate > 
{
    GCDAsyncSocket         *mSocket;
    DataProcessor          *mDataProcessor;
    msg_pkt                 mMsg_pkt;
}

@property (nonatomic, weak) id<LightMsgDelegate> delegate;
@property (nonatomic, readonly, getter = isConnected) BOOL connected;

/**
 * 单例共享
 * @return LightController
 */
+ (LightController*)shareInstance;

/**
 * 尝试建立连接
 */
- (void)connect;

/**
 * 搜索附近的灯
 */
- (void)searchLights;

/**
 * 开灯
 * @param addr 灯的地址
 */
- (void)turnOnLights:(NSString*)addr;


/**
 * 关灯
 * @param addr 灯的地址
 */
- (void)turnOffLights:(NSString*)addr;

/**
 * 设置灯的亮度(目前不好使,只有白光调亮度)
 * @param percentage 0－100 百分比
 * @param addr 灯的地址
 */
- (void)setLightBrightness:(int)percentage addr:(NSString*)addr;

/**
 * 设置灯的颜色
 * @param red 红
 * @param green 绿
 * @param blue 蓝 
 * @param addr 灯的地址
 */
- (void)setLightColorRed:(float)red green:(float)green blue:(float)blue addr:(NSString*)addr;

/**
 * 设置灯的颜色 参数为 0-255
 */
- (void)setLightColorR:(int)red g:(int)green b:(int)blue addr:(NSString*)addr;

/**
 * 纯白光
 */
- (void)setLightOnlyWhite:(NSString*)addr  brightness:(int)brightness;

/**
 * 纯红光
 */
- (void)setLightOnlyRed:(NSString*)addr;

/**
 * 纯绿光
 */
- (void)setLightOnlyGreen:(NSString*)addr;

/**
 * 纯蓝光
 */
- (void)setLightOnlyBlue:(NSString*)addr;

/**
 * 定时关灯
 * @param minute 最大支持 65535 分钟
 * @param addr
 */
- (void)setPowerOffAfter:(u_int16_t)minute addr:(NSString*)addr;

/**
 * 定时开灯
 * @param minute 最大支持 65535 分钟
 * @param addr
 */
- (void)setPowerOnAfter:(u_int16_t)minute addr:(NSString*)addr;

/**
 * 开始 闪烁
 * @param time time*40ms 间隔时间
 * @param brightness 亮度值
 * @param addr
 */
- (void)startRGBBlink:(int)time brightness:(int)brightness addr:(NSString*)addr;

/**
 * 开始RGB轮流 闪烁
 * @param time time*40ms 间隔时间
 * @param brightness 亮度值
 * @param addr
 */
- (void)startRGBTurn:(int)time brightness:(int)brightness addr:(NSString*)addr ;

/**
 * 开始RGB颜色随机变化 闪烁
 * @param time time*40ms 间隔时间
 * @param brightness 亮度值
 * @param addr
 */
- (void) startColorSmooth:(int)time brightness:(int)brightness addr:(NSString*)addr;

/**
 * 开始 随着麦克风 RGB轮流 闪烁
 *
 * @param time time*40ms 间隔时间
 * @param brightness 亮度值
 * @param addr
 */
- (void) startRGBTurnOnMic:(int)time brightness:(int)brightness addr:(NSString*)addr;

/**
 * 开始 随着麦克风 RGB颜色随机变化 闪烁
 * @param time time*40ms 间隔时间
 * @param brightness 亮度值
 * @param addr
 */
- (void)startColorSmoothOnMic:(int)time brightness:(int)brightness addr:(NSString*)addr;

@end

/**
 * 生成网络通讯包
 */
struct NetComuDataPkt_t get_package(uint8_t op_code, void *addr, void *data);


